package database

import (
	"Bok/models"
	"Bok/utils"
	"log"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// 定义数据库
var DB *gorm.DB

func initAdmin(db *gorm.DB) {
	// 检查是否已存在用户
	var count int64
	if err := db.Model(&models.User{}).Count(&count).Error; err != nil {
		log.Printf("检查用户表失败: %v", err)
		return
	}

	// 如果已经有用户，则不创建
	if count > 0 {
		log.Println("数据库中存在用户，跳过创建默认管理员")
		return
	}
	// 从环境变量获取配置，如果没有则使用默认值
	adminUsername := "超级管理员"
	adminPassword := "1234"

	// 创建默认管理员账户
	hashedPassword, err := utils.HashPassword(adminPassword)
	if err != nil {
		log.Printf("密码加密失败: %v", err)
		return
	}

	adminUser := models.User{
		Username: adminUsername,
		Password: hashedPassword,
		Bio:      "勇敢爱！",
	}

	if err := db.Create(&adminUser).Error; err != nil {
		log.Printf("创建管理员账户失败: %v", err)
		return
	}

	log.Printf("已创建默认管理员账户: username=%s, password=%s", adminUsername, adminPassword)
	log.Println("请及时登录并修改默认密码!")
}

// 初始化数据库连接
func InitDB() {
	// 用于存放数据库文件的文件夹
	dsn := "root:Lxh321@tcp(127.0.0.1:3306)/myblog?charset=utf8mb4&parseTime=True&loc=Local"
	// 数据库文件路径(里面会存放很多个表)

	// 连接SQLite数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatal("failed to connect database", err)
	}

	DB = db
	// 创建管理员
	initAdmin(DB)
	// 自动迁移模式 （根据模型创建或更新表结构）
	err = DB.AutoMigrate(
		&models.User{},
		&models.Article{},
		&models.BlogType{},
	)

	if err != nil {
		log.Fatal("Failed to migrate database:", err)
	}
	log.Println("Database migration completed successfully!")
}
